<?php 
/**
 * @Name Config 
 * @Title 配置控制器
 * @Extends app\admin\controller\AdminCore
 * @Modifiers public
 * @Auth Ghj<912524639@qq.com>
 * @Time 2018年08月08日 
 * @Site http:// www.thinkgms.com/
 */
namespace app\admin\controller;
use app\admin\controller\AdminCore;

class Config extends AdminCore{
	
	//当前控制器的模型
	protected $Model;
	
	//当前控制器的数据表
	protected $Db;
	
	//当前控制器的验证器
	protected $Validate;
	
	//当前控制器的主键
	protected $Pk='id';
	
	//搜索预设
	protected $SerchFieldPre=[
		'id'		=> '=',
		'name'		=> '=',
		'title'		=> '=',
		'group'		=> '=',
		'sort'		=> '=',
		'status'	=> '=',
		'remark'	=> 'Like',
		'create_time'	=> 'DataTime',
		'update_time'	=> 'DataTime',
	];
	
	//新增预设数据
	protected $DataPre = [
		'id'=>'',
		'name'=>'',
		'title'=>'',
		'group'=>'1',
		'value'=>'',
		'sort'=>'1',
		'status'=>'1',
		'remark'=>'',
	];
	
	/**
	 * @Name initialize
	 * @Title 初始化方法
	 * @Modifiers protected
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月09日 
	 */
    public function initialize()
    {
        // 继承父模型的初始化方
		parent::initialize ();
		$this->Validate		= validate ('app\admin\validate\Config');
		$this->Model		= model('app\admin\model\Config');
		$this->Db			= db('Config');
    }
	
	/**
	 * @Name index
	 * @Title 首页
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月09日 
	 */
	public function index() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取请求数据
			$Parm = input ( 'post.' );
			// 调用_Serch方法获取 查询条件
			$Map = _SerchFieldAssembly ( $Parm ,$this->SerchFieldPre);
			// 获取符合条件的数据总数
			$Total = $this->Model->where ( $Map )->count ();
			// 判断数据总数是否为0
			if ($Total == 0) {
				// 防止显示异常 将$List设置为''
				$List = '';
			} else {
				// 调用_ExtSort函数获取 排序条件
				$Sort = _ExtSort ( $Parm ['sort'] );
				// 查询符合条件的数据
				$List = $this->Model->where ( $Map )->order ( $Sort )->limit ( $Parm ['start'] . ',' . $Parm ['limit'] )->select ();
			}
			// 封装返回数据
			$Res = ['total' => $Total,'rows' => $List];
			// 返回json数据
			return json ( $Res );
		} else {
			// 返回视图
			return view ();
		}
	}
	
	/**
	 * @Name add
	 * @Title 新增
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月09日 
	 */
	public function add() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取POST数据
			$Parm = input ( 'post.' );
			// 验证数据 场景为add
			if ($this->Validate->scene ( 'add' )->check ( $Parm )) {
				// 数据写入 验证字段为数据库内字段 写入类型为新增
				$Result = $this->Model->allowField ( true )->isUpdate ( false )->save ( $Parm );
				// 判断执行结果
				if ($Result) {
					// 返回成功
					return _Code ( '200', '成功' );
				} else {
					// 返回失败
					$_Err = $this->Model->getError ();
					return _Code ( '201', $_Err ? $_Err : '失败' );
				}
			} else {
				// 验证失败 获取验证器的错误信息
				$_Err = $this->Validate->getError ();
				// 返回错误信息 如果没有错误信息 默认返回
				return _Code ( '301', $_Err ? $_Err : '数据验证失败' );
			}
		} else {
			return _Code ( '200', '成功', $this->DataPre );
		}
	}
	
	/**
	 * @Name edit
	 * @Title 更新
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月09日 
	 */
	public function edit() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取POST数据
			$Parm = input ( 'post.' );
			if(!array_key_exists($this->Pk,$Parm)){
				// 参数异常 返回错误信息
				return _Code ( '101', '参数异常 主键不存在' );
			}
			// 验证数据 场景为edit
			if ($this->Validate->scene ( 'edit' )->check ( $Parm )) {
				// 数据写入 验证字段为数据库内字段 写入类型为更新
				$Result = $this->Model->allowField ( true )->isUpdate ( true )->save ( $Parm, [ $this->Pk => $Parm[$this->Pk] ]);
				// 判断执行结果
				if ($Result) {
					// 返回成功
					return _Code ( '200', '成功' );
				} else {
					// 返回失败
					$_Err = $this->Model->getError ();
					return _Code ( '201', $_Err ? $_Err : '失败' );
				}
			} else {
				// 验证失败 获取验证器的错误信息
				$_Err = $this->Validate->getError ();
				// 返回错误信息 如果没有错误信息 默认返回
				return _Code ( '301', $_Err ? $_Err : '数据验证失败' );
			}
		} else {
			// 获取请求ID
			$ParmID = input ( $this->Pk, '' );
			// 验证参数
			if ($ParmID == '') {
				// 参数异常 返回错误信息
				return _Code ( '101', '参数异常 主键不存在' );
			}
			// 读取数据
			$Result = $this->Model->where ( [ $this->Pk => $ParmID ] )->find ();
			// 判断数据是否正确
			if (! $Result) {
				// 返回错误信息
				return _Code ( '201', '数据不存在' );
			}
			// 返回json数据
			return _Code ( '200', '成功', $Result );
		}
	}
	
	/**
	 * @Name del
	 * @Title 删除
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月09日 
	 */
	public function del() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取请求ID
			$ParmID = input ( $this->Pk, '' );
			// 验证参数
			if ($ParmID == '') {
				// 参数异常 返回错误信息
				return _Code ( '101', '参数异常 主键不存在' );
			}
			// 拆分字符串 因为前台可能会删除多条数据
			$ParmID = explode ( ',', $ParmID );
			// 删除数据
			$Result = $this->Model->destroy ( $ParmID );
			// 判断执行结果
			if ($Result) {
				// 返回成功
				return _Code ( '200', '成功' );
			} else {
				// 返回失败
				$_Err = $this->Model->getError ();
				return _Code ( '201', $_Err ? $_Err : '失败' );
			}
		}
	}

	/**
	 * @Name setting
	 * @Title 系统设置
	 * @Modifiers public
	 * @Auth Ghj<912524639@qq.com>
	 * @Time 2018年08月09日 
	 */
	public function setting() {
		// 判断请求类型
		if ($this->request->isPost ()) {
			// 获取POST数据
			$Parm	= input ( 'post.' );
			// 获取数据库配置数据
			$Result	= $this->Db->column('value','name');
			$Updata = [];
			$Time	= time();
			$Num	= 0;
			// 实例化验证器
			foreach($Parm as $K => $V){
				if(array_key_exists($K,$Result)){
					if($V != $Result[$K]){
						$Temp = ['name'=>$K,'value'=>$V,'update_time'=>time()];
						// 数据写入 验证字段为数据库内字段 写入类型为更新
						$Return = $this->Model->where(['name' => $K])->update ($Temp);
						// 判断执行结果
						if (!$Return) {
							// 返回失败
							return _Code ( '201', '失败' );
						}
						$Num++;
					}
				}
			}
			if($Num>0){
				//重置配置缓存
				model('app\admin\logic\Config')->_ResetCache();
				return _Code ( '200', '成功更新 '.$Num.' 条配置信息' );
			}else{
				return _Code ( '200', '未更新配置文件' );
			}
		} else {
			$ShowType = input('t','');
			if($ShowType == ''){
				$ConfigGroup = $this->_SysData['dictionary']['config_group'];
				$this->assign('ConfigGroup',$ConfigGroup);
				$List = $this->Db->where ( ['status'=>1] )->order ('sort asc')->select ();
				$this->assign('List',$List);
				// 返回视图
				return view ();
			}else{
				$List = $this->Db->where ( ['status'=>1] )->column('value','name');
				return _Code('200','',$List);
			}
		}
	}
}